home *** CD-ROM | disk | FTP | other *** search
/ Multimedia Jumpstart / Multimedia Microsoft Jumpstart Version 1.1a (Microsoft).BIN / develpmt / source / blt / dib.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-01-05  |  4.8 KB  |  104 lines

  1. /*----------------------------------------------------------------------------*\
  2. |   Routines for dealing with Device independent bitmaps                       |
  3. |                                           |
  4. |   History:                                                                   |
  5. |       06/23/89 toddla     Created                                            |
  6. |                                                                              |
  7. \*----------------------------------------------------------------------------*/
  8.  
  9. typedef     LPBITMAPINFOHEADER PDIB;
  10. typedef     HANDLE             HDIB;
  11.  
  12. PDIB        DibOpenFile(LPSTR szFile);
  13. BOOL        DibWriteFile(PDIB pdib, LPSTR szFile);
  14. PDIB        DibReadBitmapInfo(HFILE fh);
  15. HPALETTE    DibCreatePalette(PDIB pdib);
  16. BOOL        DibSetUsage(PDIB pdib, HPALETTE hpal,UINT wUsage);
  17. BOOL        DibDraw(HDC hdc, int x, int y, int dx, int dy, PDIB pdib, int x0, int y0, int dx0, int dy0, LONG rop, UINT wUsage);
  18. PDIB        DibCreate(int bits, int dx, int dy);
  19. PDIB        DibCopy(PDIB pdib);
  20. void        DibMapToPalette(PDIB pdib, HPALETTE hpal);  
  21. PDIB         DibConvert(PDIB pdib, int BitCount, DWORD biCompression);
  22.  
  23. PDIB        DibFromBitmap(HBITMAP hbm, DWORD biStyle, UINT biBits, HPALETTE hpal, UINT wUsage);
  24. HBITMAP     BitmapFromDib(PDIB pdib, HPALETTE hpal, UINT wUsage);
  25.  
  26. void        MakeIdentityPalette(HPALETTE hpal); 
  27. HPALETTE    CopyPalette(HPALETTE hpal);
  28.  
  29. /****************************************************************************
  30.  DIB macros.
  31.  ***************************************************************************/
  32.  
  33. #define _abs(x)    (((x) < 0) ? -(x) : (x))
  34.  
  35. #ifdef  WIN32
  36.     #define HandleFromDib(lpbi) GlobalHandle(lpbi)
  37. #else
  38.     #define HandleFromDib(lpbi) (HANDLE)GlobalHandle(SELECTOROF(lpbi))
  39. #endif
  40.  
  41. #define DibFromHandle(h)        (PDIB)GlobalLock(h)
  42.  
  43. #define DibFree(pdib)           GlobalFreePtr(pdib)
  44.  
  45. #define WIDTHBYTES(i)           ((unsigned)((i+31)&(~31))/8)  /* ULONG aligned ! */
  46.  
  47. #define DibWidth(lpbi)          _abs((int)(LONG)(((LPBITMAPINFOHEADER)(lpbi))->biWidth))
  48. #define DibHeight(lpbi)         _abs((int)(LONG)(((LPBITMAPINFOHEADER)(lpbi))->biHeight))
  49. #define DibBitCount(lpbi)       (UINT)(((LPBITMAPINFOHEADER)(lpbi))->biBitCount)
  50. #define DibCompression(lpbi)    (DWORD)(((LPBITMAPINFOHEADER)(lpbi))->biCompression)
  51.  
  52. #define DibWidthBytesN(lpbi, n) (UINT)WIDTHBYTES((UINT)(lpbi)->biWidth * (UINT)(n))
  53. #define DibWidthBytes(lpbi)     DibWidthBytesN(lpbi, (lpbi)->biBitCount)
  54.  
  55. #define DibSizeImage(lpbi)      ((lpbi)->biSizeImage == 0 \
  56.                                     ? ((DWORD)(UINT)DibWidthBytes(lpbi) * (DWORD)DibHeight(lpbi)) \
  57.                                     : (lpbi)->biSizeImage)
  58.  
  59. #define DibSize(lpbi)           ((lpbi)->biSize + (lpbi)->biSizeImage + (int)(lpbi)->biClrUsed * sizeof(RGBQUAD))
  60. #define DibPaletteSize(lpbi)    (DibNumColors(lpbi) * sizeof(RGBQUAD))
  61.  
  62. #define DibFlipY(lpbi, y)       ((int)_abs((lpbi)->biHeight)-1-(y))
  63.  
  64. //HACK for NT BI_BITFIELDS DIBs
  65. #ifdef WIN32
  66.     #define DibPtr(lpbi)            ((lpbi)->biCompression == BI_BITFIELDS \
  67.                                        ? (LPVOID)(DibColors(lpbi) + 3) \
  68.                                        : (LPVOID)(DibColors(lpbi) + (UINT)(lpbi)->biClrUsed))
  69. #else
  70.     #define DibPtr(lpbi)            (LPVOID)(DibColors(lpbi) + (UINT)(lpbi)->biClrUsed)
  71. #endif
  72.  
  73. #define DibColors(lpbi)         ((RGBQUAD FAR *)((LPBYTE)(lpbi) + (int)(lpbi)->biSize))
  74.  
  75. #define DibNumColors(lpbi)      ((lpbi)->biClrUsed == 0 && (lpbi)->biBitCount <= 8 \
  76.                                     ? (int)(1 << (int)(lpbi)->biBitCount)          \
  77.                                     : (int)(lpbi)->biClrUsed)
  78.  
  79. #define DibXYN(lpbi,pb,x,y,n)   (LPVOID)(                                     \
  80.                                 (BYTE _huge *)(pb) +                          \
  81.                                 (UINT)((UINT)(x) * (UINT)(n) / 8u) +          \
  82.                                 ((DWORD)DibWidthBytesN(lpbi,n) * (DWORD)(UINT)(y)))
  83.  
  84. #define DibXY(lpbi,x,y)         DibXYN(lpbi,DibPtr(lpbi),x,y,(lpbi)->biBitCount)
  85.  
  86. #define FixBitmapInfo(lpbi)     if ((lpbi)->biSizeImage == 0)                 \
  87.                                     (lpbi)->biSizeImage = DibSizeImage(lpbi); \
  88.                                 if ((lpbi)->biClrUsed == 0)                   \
  89.                                     (lpbi)->biClrUsed = DibNumColors(lpbi);   \
  90.                                 if ((lpbi)->biCompression == BI_BITFIELDS && (lpbi)->biClrUsed == 0) \
  91.                                     ; // (lpbi)->biClrUsed = 3;                    
  92.  
  93.  
  94. /****************************************************************************
  95.  ***************************************************************************/
  96.  
  97. #ifndef BI_BITFIELDS
  98.     #define BI_BITFIELDS 3
  99. #endif  
  100.  
  101. #ifndef HALFTONE
  102.     #define HALFTONE COLORONCOLOR
  103. #endif
  104.